// https://leetcode.cn/problems/two-sum-iii-data-structure-design/
// Created by ade on 2022/11/8.
// TwoSum() 使用空数组初始化 TwoSum 对象
//void add(int number) 向数据结构添加一个数 number
//boolean find(int value) 寻找数据结构中是否存在一对整数，使得两数之和与给定的值相等。如果存在，返回 true ；否则，返回 false 。
// 注意：add的次数远大于find的次数
#include <vector>
#include <iostream>
#include <unordered_map>

using namespace std;

class TwoSum {
public:
    unordered_map<long long, int> totals = {};

    TwoSum() {

    }

    void add(int number) {
        totals[number]++;
    }

    bool find(int value) {
        for (auto &i : totals) {
            if (i.first * 2 == value) {
                if (i.second >= 2) return true;
            } else if (totals.count(value - i.first) > 0) return true;
        }
        return false;
    }
};

int main() {
    TwoSum so;
    so.add(0);
    so.add(0);
    cout << so.find(0) << endl;
    return 0;
}